#ifndef FILELINEEDIT_H
#define FILELINEEDIT_H

#include <QLineEdit>
#include <QFileDialog>
#include <QMouseEvent>

class FileLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    enum class FileLineEditType {
        Image,        // 图片文件 (.png, .jpg, .bmp)
        Text,         // 文本文件 (.txt, .md, .doc)
        Binary,       // 二进制文件 (.dat)
        Music,        // 音乐文件 (.wav, .mp3)
        Program       // 可执行文件 (.exe)
    };

public:
    explicit FileLineEdit(QWidget *parent = nullptr);

    void setFileLineEditType(const FileLineEditType& type);

    QString getFilePathString();
protected:
    void mouseDoubleClickEvent(QMouseEvent *event) override;
private:
    // 公开接口，让外部调用文件选择功能
    QString selectFile(const QString &title);
    // 打开文件选择对话框并指定多个文件类型
    QString openFileDialogWithTypes(const QString &title, const QStringList &fileTypes);
    // 创建文件过滤器字符串
    QString createFileFilter(const QStringList &fileTypes);
private:
    // 文件类型过滤器列表
    QStringList m_fileTypes;
    QString m_strTitle;

    QString m_strFilePath;
};

#endif // FILELINEEDIT_H
